<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <!-- React核心包 最先引入  提供一个对象React -->
  <script src="../../react资料_stu/依赖包/react.development.js"></script>
  <!-- ReactDOM包  提供一个对象ReactDOM -->
  <script src="../../react资料_stu/依赖包/react-dom.development.js"></script>
  <!-- babel -->
  <script src="../../react资料_stu/依赖包/babel.min.js"></script>
</head>

<body>
  <!-- react操作的容器 -->
  <div id="app">

  </div>
</body>
<script type="text/babel">


  /* 
        porps是用来做父子组件通信的
          - 在父组件中使用子组件的时候,可以给子组件添加属性
          - 在子组件中组件实例的props属性上,就能拿到这个属性和值
  */

  class Fu extends React.Component {

    state = {
      car: "八手奥托"
    }

    carChangeHander = () => {
      //组件实例身上有有关setState()方法 接受一个对象 会把接受的对象和原有的对象进行合并 并重新渲染
      //this 组件实列
      this.setState({ car: "被修改了的八手奥托" })

    }

    render() {
      const { car } = this.state

      return (<div>
        <p>我是父组件</p>
        <p a={1}>我开的是{car}</p>
        <button onClick={this.carChangeHander}>修改父组件的state会发生什么</button>
        <hr />
        <Son car={car} />
      </div>)

    }

  }

  class Son extends React.Component {

    //当父组件的state属性发送改变
    //子组件会调用render方法生成新的虚拟DOM 重新渲染
    render() {
      //这是子组件实列
      // console.log(this);
      //这是从父组件拿的数据
      // console.log(this.props)
      // porps是用来做父子组件通信的
      //   - 在父组件中使用子组件的时候,可以给子组件添加属性
      //   - 在子组件中组件实例的props属性上,就能拿到这个属性和值

      const { car } = this.props
      return (<div>
        <p>我是子组件</p>
        <p>我开我老子的{car}</p>
      </div>)

    }
  }



  //创建容器并渲染虚拟DOM

  const root = ReactDOM.createRoot(document.getElementById('app'));
  root.render(<Fu />)



</script>

</html>